/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.dao.implementaciones;

import desarrollosoft.ghce.dao.interfaces.IGrupoEtarioDAO;
import desarrollosoft.ghce.entidades.GrupoEtario;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;

/**
 *
 * @author ariel
 */
@Repository("grupoEtarioDAO")
public class GrupoEtarioDAO implements IGrupoEtarioDAO {
    
    @PersistenceContext
    EntityManager entityManager;

    @Override
    public List<GrupoEtario> obtenerTodosGruposEtarios() {
        Query consulta = entityManager.createQuery(
                "SELECT g FROM GrupoEtario g ORDER BY g.edadMinima ASC"
        );
        return consulta.getResultList();
    }

    @Override
    public List<GrupoEtario> obtenerGruposEtarios(String textoBuscar) {
        Query consulta = entityManager.createQuery(
                "SELECT g FROM GrupoEtario g WHERE g.nombre LIKE CONCAT (:texto,'%') ORDER BY g.nombre"
        );
        consulta.setParameter("texto", textoBuscar);
        return consulta.getResultList();
    }

    @Override
    public void eliminarGrupoEtario(GrupoEtario grupoEtario) {
        entityManager.remove( entityManager.merge(grupoEtario) );
    }

    @Override
    public void modificarGrupoEtario(GrupoEtario grupoEtario) {
        entityManager.merge(grupoEtario);
    }

    @Override
    public void crearGrupoEtarios(GrupoEtario grupoEtario) {
        entityManager.persist(grupoEtario);
    }

    /*@Override
    public boolean seSuperponenEdades(GrupoEtario grupoEtario) {
        List<GrupoEtario> listaTodos = obtenerTodosGruposEtarios();
        for (GrupoEtario g : listaTodos) {
            if (!g.getId().equals(grupoEtario.getId())) {
                if (g.seSuperponenEdades(grupoEtario)) {
                    return true;
                }
            }
        }
        return false;
    }*/

    @Override
    public boolean existeOtroConMismoNombre(GrupoEtario grupoEtario) {
        Query consulta = entityManager.createQuery(
                "SELECT g FROM GrupoEtario g WHERE (UPPER(g.nombre) = UPPER(:nombre))"
        );
        consulta.setParameter("nombre", grupoEtario.getNombre());
        List<GrupoEtario> lista = consulta.getResultList();
        if (lista.isEmpty()) {
            return false;
        }
        return true;
    }

    @Override
    public boolean existeOtroConMismoNombreDistintoId(GrupoEtario grupoEtario) {
        Query consulta = entityManager.createQuery(
                "SELECT g FROM GrupoEtario g WHERE UPPER(g.nombre) = UPPER(:nombre) AND g.id <> :id"
        );
        consulta.setParameter("nombre", grupoEtario.getNombre());
        consulta.setParameter("id", grupoEtario.getId());
        List<GrupoEtario> lista = consulta.getResultList();
        if (lista.isEmpty()) {
            return false;
        }
        return true;
    }
}
